package com.olymtech.jbricks.demo.freemarker;

import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.apache.commons.collections.map.HashedMap;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author haoting.wang
 * @date 2020/12/17 4:56 下午
 **/
public class FreemarkerDemo {

    public static String str = "<!DOCTYPE html>\n" +
            "<html lang=\"en\">\n" +
            "<head>\n" +
            "    <meta charset=\"UTF-8\">\n" +
            "    <title>Title</title>\n" +
            "</head>\n" +
            "<body>\n" +
            "hello：${委托人简称}<br><br> &nbsp;&nbsp;&nbsp;&nbsp;您的 ${提单号} 的订单将在 ${预计开航时间} 开船</p>\n" +
            "<p><br></p>\n" +
            "<table>\n" +
            "\n" +
            "    <tr>\n" +
            "        <td>JOB NO</td>\n" +
            "        <td>REF</td>\n" +
            "        <td>ETD</td>\n" +
            "        <td>V/V</td>\n" +
            "    </tr>\n" +
            "    <#list orders as o>\n" +
            "        <tr>\n" +
            "            <td>${o.工作编号}</td>\n" +
            "            <td>${o.客户编号}</td>\n" +
            "            <td>${o.预计开船时间}</td>\n" +
            "            <td>${o.船名航次}</td>\n" +
            "        </tr>\n" +
            "    </#list>\n" +
            "</table>\n" +
            "\n" +
            "</body>\n" +
            "</html>";

    public static void main(String[] args) throws IOException, TemplateException {

        // 1、创建个Configuration对象
        Configuration configuration = new Configuration(Configuration.getVersion());
        String fileName = FreemarkerDemo.class.getClassLoader().getResource("freemarker").getPath();//获取文件路径
        // 2、设置模板文件所在的路径的目录 d d d
        configuration.setDirectoryForTemplateLoading(new File(fileName));
        // 3、设置模板文件的字符集
        configuration.setDefaultEncoding("UTF-8");




        // 4、首先创建模板文件，再加载模板文件 模板文件的后缀官方统一的标准是.ftl 其实任何类型都行。
     //   Template template = configuration.getTemplate("demo.ftl");// 可以是<相对路径>，也可以是<绝对路径>

        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        stringTemplateLoader.putTemplate("template",str);
        configuration.setTemplateLoader(stringTemplateLoader);
        Template   template = configuration.getTemplate("template");// 可以是<相对路径>，也可以是<绝对路径>


        // 5、创建模板文件需要展示数据的数据集对象，可以使用POJO，也可以使用map 一般是使用map
        Map<String, Object> map = new HashMap<>();

        map.put("委托人简称", "王浩艇");
        map.put("提单号", "TD12413252436262");
        map.put("预计开船时间", "2020-12-12");

        List<Map<String,String>> list = new ArrayList<>();

        Map<String,String> sub1 = new HashedMap();
        sub1.put("工作编号", "GZBH21351515");
        sub1.put("客户编号", "KHBH23452362");
        sub1.put("船名航次", "1818黄金眼");
        sub1.put("预计开船时间", "2020-12-12");

        Map<String,String> sub2 = new HashedMap();
        sub2.put("工作编号", "GZBH21351515");
        sub2.put("客户编号", "KHBH23452362");
        sub2.put("船名航次", "1818黄金眼");
        sub2.put("预计开船时间", "2020-12-12");

        list.add(sub1);
        list.add(sub2);

        map.put("orders",list);

        // 6、创建一个FileWriter对象 指定生成的静态文件的文件路径及文件名
        StringWriter stringWriter = new StringWriter();

        // 7、调用模板对象的process方法，执行输出文件。
        template.process(map, stringWriter);


        System.out.println(stringWriter.toString());
    }
}
